home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 November: Tool Chest / Dev.CD Nov 00 TC Disk 1.toast / What's New? / Development Kits / Mac OS / USB DDK 1.4.6f4 / Documentation / Mac OS USB Change History next >
Encoding:
Text File  |  2000-09-26  |  25.1 KB  |  425 lines  |  [TEXT/ttxt]

  1.  ***
  2.  ***    Universal Serial Bus(tm) (USB) for Mac OS
  3.  ***    Mac OS USB 1.4.6f4 Driver Development Kit (DDK) Change History
  4.  ***    Copyright © 1998-2000 Apple Computer, Inc.
  5.  ***
  6.  
  7.   *** IMPORTANT *** IMPORTANT *** IMPORTANT *** IMPORTANT ***
  8.  
  9. The USB Support and USB Device Extension files may not be distributed 
  10. in any manner.  These files are for developer use only, and are NOT
  11. TO BE INCLUDED with the components installed with your product.
  12.  
  13. This DDK requires that you have the Universal Interfaces and Libraries 3.3.1 installed in your development environment. You can obtain these files from the Apple Developer Connection SDK web page: 
  14.  
  15.   <http://developer.apple.com/sdk>
  16.  
  17. The two common symptoms that you have not yet installed these files will be:
  18. 1. There is a compile time error that the header file "MacErrors.h" could not be found
  19. 2. There is a link error that the file HIDLib could not be found.
  20.  
  21. Both files are included with Universal Interfaces and Libraries 3.3.1.
  22.  
  23. Refer to the document "MacOS USB Change History -> 1.2" for the Change History of Mac OS USB up to version 1.2.
  24.  
  25.  
  26.  Table of Contents:
  27. -------------------------------------------------------------
  28.  Testing USB 1.4.6f4 on an Power Macintosh with Built-in USB
  29.  Testing USB 1.4.6f4 on older Power Macintosh system without built-in USB
  30.  Changes from USB 1.4.3 -> 1.4.6
  31.  USB 1.4.2
  32.  Changes from USB 1.4.1 -> 1.4.3
  33.  Changes from USB 1.4 -> 1.4.1
  34.  Changes from USB 1.3.5 -> 1.4
  35.  Changes from USB 1.2 -> 1.3.5f8
  36.  
  37. -------------------------------------------------------------
  38.  
  39. Testing USB 1.4.6f4 on Power Macintosh systems with built-in USB
  40. --------------------------------------------------------------
  41.  
  42. For Macintosh Systems with built-in USB, you should test with Mac OS 9.0.4 installed. Ideally, you should test with the Mac OS update to System 9.0.x installed if you have access to the Apple Developer Relations Seed Site. Use the Software Update Control Panel built into Mac OS 9 to download the software update. Alternatively, you can test with the System Extension files supplied as part of this DDK. However, if you encounter a problem, you will need to verify whether the problem still occurs with Mac OS 9.0.4 before submitting a bug report. Refer to the Installation instructions provided in the "Mac OS USB DDK Readme" to test with the Extension files. Important note: Mac OS USB 1.4.6 will only be available on systems with the update to Mac OS 9.0.4 installed.
  43.  
  44. Note that USB audio support requires Mac OS 9.0 or later on a Macintosh system with built-in USB to function properly.
  45.  
  46. Please make no assumption as to the release of Mac OS USB indicating the presence of a specific version of Mac OS System Software.
  47.  
  48.  
  49. Testing USB 1.4.6f4 on older Power Macintosh systems without built-in USB
  50. ------------------------------------------------------------------------
  51.  
  52. For Macintosh Systems which do no have built-in USB, but have an installed USB PCI or Cardbus card present, follow the instructions presented in the Mac OS USB DDK Readme document.
  53.  
  54. Changes from USB 1.4.3 -> 1.4.6
  55. -------------------------------
  56.  
  57. Developer Tools
  58. - New HID Browser, fixed buttons displays.
  59.  
  60. Comm Class Driver
  61. - Fixed problem that would cause devices returning STALL to SET_INTERFACE to fail to initialize
  62.  
  63. USB Family Expert
  64. - Added support for multiple driver descriptors in a USB Class Driver.   We now look for an exported symbol "The USBDriverDescriptionCount", and if found, retrieve its value and treat the 'TheUSBDriverDescription' as an array with that many elements. If the symbol is not found, treat 'TheUSBDriverDescription' as having only a single entry. This change makes it possible to write a driver which supports multiple devices with a single driver in the presence of USB 1.4.6 or later. For compatibility with older releases of USB, set the first 'TheUSBDriverDescription' record with the match criteria for the primary device which the driver supports.
  65.  
  66. USB.h file
  67. - Removed support for "OLDCLASSNAMES"
  68.  
  69. USB Composite Class Driver
  70. - Helped composite driver replacement for slow devices.   Fixes some problems with devices that fail to work if attached at boot time, but work when hot-plugged.
  71.  
  72. USBKeypad (DDK Sample Driver)
  73. - Changed the sample code to use BlockMoveData (instead of slower BlockMove).
  74.  
  75. Storage Class Driver (DDK Sample Driver)
  76. - Reverted the driver's dispatch table name to the generic name to be compatible with shim.
  77. - Change the shim to properly use USBGetDriverConnectionID.
  78. - Changed the Unit table driver code to use BlockMoveData.
  79.  
  80. HID Driver
  81. - Changed the driver to use BlockMoveData instead of BlockMove.
  82.  
  83. HUB Driver
  84. - Changed the driver to use BlockMoveData instead of BlockMove.
  85.  
  86. OHCI UIM
  87. - Fixed a problem that caused root-hub interrupts to be lost (hot plugging didn't work with PCI cards).
  88.  
  89. PrinterClass Driver
  90. - Changed the driver and sample to use BlockMoveData instead of BlockMove.
  91.  
  92. Printer Chooser example
  93. - Changed the sample code to use BlockMoveData instead of BlockMove.
  94.  
  95. USB Family Expert
  96. - Added Logging messages to SendDeviceNotification.
  97. - Added logging messages when notifications aren't send because of bad descriptor data
  98.  
  99. Keyboard Shim
  100. - Weak link to power manager to allow load on old (PDM) machines.
  101.  
  102. DropPrint example
  103. - remove obsolete definition of QDGlobals.
  104.  
  105.  
  106. USB 1.4.2
  107. ---------
  108. USB 1.4.2 addresses only a single issue regarding the USB hubs on the Apple Studio Displays being unusable upon the system awakening from sleep. For this release, the Gestalt selector 'usbv' returns 0x01428000. Note that the version of the USB Device Extension file remains 1.4.1. USB 1.4.2 is included as part of Mac OS 9.0.4. There is no standalone installer nor separate extensions provided for testing of this release. You can only test with this release of USB by installing Mac OS 9.0.4.
  109.  
  110.  
  111. Changes from USB 1.4.1 -> 1.4.3
  112. -------------------------------
  113.  
  114. Comm Class Driver
  115. - Removed baud-rate lock (DTE rate was 115k baud always).
  116.  
  117. Composite Class Driver
  118. - Suppress repeating not-terminating messages.
  119.  
  120. DDK
  121. - New StorageClassSample added.
  122. - New PowerClassQueryDevice sample added.
  123. - Added Readme's to PrinterClass and PowerClassQueryDevice examples.
  124.  
  125. HID Driver
  126. - Make sure we won't call any HIDGetReport handlers after a call the HIDCloseDevice
  127. - Added HIDGetIndexedString function. This function is used to get a string directly from a HID device.
  128. - Fixed slow updating from certain HID devices.
  129. - Fixed some occasional mouse/keyboard failures when using certain hubs.
  130.  
  131. HID Library
  132. - Added new "Capabilities" functions that clients can find the units and exponents of various values.
  133. - Fixed problems with complex report decriptors that was leading to failures with keyboards that had lots of LEDs.
  134.  
  135. Hub Class Driver
  136. - Improve driver tracing, use hub verbosity bit in Expert Options to enable.
  137. - Fixed reset error recovery failure
  138. - Return correct error from port reset when set address fails.
  139.  
  140. OHCI UIM
  141. - Remove Isoc error messages on short packets
  142. - BulkTransfer split into two parts (setup and allocating the transfer descriptors).  This will allow us to remove the artificial limit of 4K for control transactions.
  143. - Added descriptive expert log text for Isoch errors.
  144.  
  145. Power Class Driver
  146. - Fixed problem with invalid values returned before the device provided any updates.
  147.  
  148. Printer Class Driver
  149. - Weak link to USBExpertStatusLevel to allow use with old versions of USB.
  150. - Only use USB suspend/resume if the version of USB supports that functionality.
  151. - Turned off LOCK_MEMORY flag, since it's not needed with double-buffering.
  152.  
  153. SerialShimLib
  154. - Added SetFlags & GetGlobals entry points
  155.  
  156. USB Expert 
  157. - Suppress repeating deferred termination messages in the USB expert log.
  158. - Added mechanism for ADB Shim to discover keyboard information from third parties (USBConfigureADBShim)
  159.  
  160. USBServicesLib
  161. - Fixed problem were an immediate UIM error could be placed on the wrong queue (and thus the callback would never occur).
  162. - Fixed problem with USBGetStringDescriptor. If a device returned an error (such as a STALL) in response to the request to read the length bytes, we would call the completion routine then continue to try reading the string, thus calling the completion routine a second time.  Since drivers typically don't ask for strings the device doesn't support, this may not be that big of a problem.
  163. - Added checks for delayed callbacks, reduced unnecessary messages.
  164. - Fixed problem when handling some immediate errors in our queues.  Should result in more reliable operation.
  165.  
  166. Changes from USB 1.4 -> 1.4.1f4
  167. -------------------------------
  168.  
  169. 1. Implemented a fix for printer class devices where a suspend request to the interface driver resulted in suspending the entire device.
  170.  
  171. 2. Fixed the "jerky cursor" problem which occurred whenever the USB mouse was used during disk activity. The problem was especially noticeable on PowerBook system whenever the internal drive had gone to sleep and was being spun ap.
  172.  
  173. 3. Fixed a problem in which waking up a PowerBook G3 Series system with a USB Cardbus card present would lose USB services.
  174.  
  175. 4. Implemented the following HID routines
  176. HIDGetNextButtonInfo
  177. HIDGetNextUsageValueInfo
  178. HIDGetReportLength
  179. HIDInitReport
  180.  
  181. 5. Fixed the HID Driver to return the serial string when passed the HIDGetDeviceInfo request with the kHIDGetInfo_GetSerialNumberString selector.
  182.  
  183. 6. Include the HID Reader utility (which based on the HID Reader sample code, but is far more extensive a program).
  184.  
  185. 7. Include the PowerClassQueryDevice sample program.
  186.  
  187. 8. USB now checks for the presence of the 'dbex' resource to allow disabling of file based drivers if the Shift key is held down at startup.
  188.  
  189. 9. Fixed a memory corruption problem in the HID driver when it would allocate memory during interrupt time.
  190.  
  191. 10. Updated the PrintClassDriver to work with all releases of USB 1.1 and greater.  Also fixed a problem with the DrvrGlue.a.o where the older code was still being used even though the .a code had been updated. Separated the PrinterDriver from the Chooser portion of the sample.
  192.  
  193. 11. Fixed a problem with USBProber such that it was not displaying the driver version string correctly.
  194.  
  195.  
  196. Changes from USB 1.3.5f8 -> 1.4
  197. -------------------------------
  198. 1. Added feature for a USBShim to be registered as a shared library. USBShim must export the symbol "ShimDescription" which is a structure of type USBShimDescription where the USBShimLoadingOptions field must have the kUSBRegisterShimAsSharedLibrary bit set, and the libraryName field defines the CFM shared library name.
  199.  
  200. 2. Added support for the HIDDriver HIDGetReport and HIDSetReport API's.
  201.  
  202. 3. The OHCI UIM has been modified so that the root hub simulation is interrupt based instead of polled. Other changes were made to the USB keyboard and pointing devices to work with Macsbug.
  203.  
  204. 4. Fixed a buffer overrun situation with the USB Audio class driver which resulted in the corruption of the heap. The common symptom was that USB microphones would work for a period of time, but then input would stop.
  205.  
  206. 5. Implemented several fixes in the USB Audio class for compatibility with audio input and output devices.
  207.  
  208. 6. Fixed an error-recovery problem in the Printer class driver.
  209.  
  210. 7. Modified USB Family Expert to report better error messages when a driver fragment fails to load.
  211.  
  212. 8. Modified the HID class driver for compatibility with USB 1.1.
  213.  
  214. 8. Added support to the HID class driver for some digitizer tablets.
  215.  
  216. 9. Exported the USBAddShimFromDisk function from the USB Family Expert so that this call now works properly.
  217.  
  218. 10. USB Shims and Drivers can now be in either 'usbd' or 'usbs' files.
  219.  
  220. 11. Added API call USBSetPipePolicy to allow changing pipe characteristics. This call will be better documented in a future version of this readme. Some things that can be controlled -
  221.  
  222.     Max number of bytes per frame. Allows Isoc devices to use less than bandwidth specified in the endpoint.
  223.  
  224.     Max data  per IRP. Basically the max that usbReqCount can be. This is currently not implemented.
  225.  
  226.     Max service interval. For Interrupt endpoints, this is the polling interval. 
  227.  
  228.     
  229. 12. Added API call to obtain the USB String Descriptor
  230.   
  231.                 OSStatus USBGetStringDescriptor(USBPB *pb)
  232.  
  233.      --> usbReference       Device/Interface
  234.      --> usb.cntl.WValue    String number
  235.      --> usb.cntl.WIndex    Language code, 0 for English
  236.      --> usbBuffer          Where to put descriptor
  237.      --> usbReqCount        Size of buffer
  238.     <--  usbActCount        Size of returned string
  239.  
  240.  
  241. 13. Fixed problem with suspend and  resume so that transactions are processed correctly.
  242.  
  243. 14. Removed support in the Audio class driver for 4.000 kHz and 8.000 kHz sampling rates.
  244.  
  245. 15. Moved USB.h to the Interfaces folder. Added HID.h to the Interfaces folder.
  246.  
  247. 16. Added API call to obtain the bandwidth available to an isochronous device. 
  248.      OSStatus USBGetBandwidthAvailableByReference 
  249.  
  250.      -->     usbReference      device/interface/pipe on bus
  251.      <--     avail             currently available bandwidth
  252.  
  253. 17. Added the kUSBDebugAwareFlag to USB.h.  This is used by drivers that want a transfer to complete while Macsbug is active.  Typically this will just be keyboard/mouse drivers. The use of this flag will be documented later. In order for Macsbug to work properly with modules which implement this flag, the next version of the MacOS ROM file is required.
  254.  
  255. 18. Fixed a problem with the Audio class driver such that the mouse was jerky with audio active.
  256.  
  257. 19. Fixed a problem with the USB CardBus Enabler so that the UIM is unloaded before the card is ejected.
  258.  
  259. 20. The HID class driver checks for USB versions earlier than 1.1 and refuses to load.  
  260.  
  261. 21. Addessed a crash problem with hot-plugging devices to a CMD 670/673 USB PCI card.
  262.  
  263. 22. Added API call, USBPortStatus
  264.  
  265.     OSStatus USBPortStatus(USBPB *pb)
  266.  
  267.      --> usbReference       Device/Interface
  268.     <--  usbStatus          result of query.
  269.  
  270. The result of the query is most likely to be:
  271.  
  272.    noErr                   nothing is wrong, transient error
  273.    kUSBDeviceDisconnected  the device is no longer connected
  274.    kUSBPortDisabled        port device is disabled. A reset is needed.
  275.  
  276. The USBPortStatus call is designed to be used when a driver gets a kUSBNotResponding error, to find out why this error occurred. This will distinguish between a transient error, that where the device is disconnected, and the condition where the driver's port has been disabled because of a babble condition (can be caused by ESD).
  277.  
  278. In response, if the device is disconnected the the Apple class drivers have been modified to stop communications with the device and prepare to be cleaned up. If the port is disabled, the class drivers will reset the device and go back into their configuration routines.
  279.  
  280. 23. Included the USB Software Locator technote #1191, along with various tools for creating an Installer script and for testing the software update from the USB staging server.
  281.  
  282. 24. Added Expert Options Control Panel to allow control of a. the default Expert Status level, b. the size of the Expert Status message buffer, and c. and to force USB to assign fixed addresses to devices. This latter option means that if the USB topology remains unchanged across reboots, then each device will be assigned the same USB address.
  283.  
  284. 25. Added Power Class driver to the USB Device Support driver file. Along with this support are the addition of the following API's in the PowerClass.h file
  285.  
  286. OSStatus GetNextPowerDevice (PowerDeviceDescriptor *device);
  287. OSStatus USBPowerGetUsageData (USBReference reference, UInt32 inCollection, 
  288.                     HIDUsage inUsagePage, HIDUsage inUsage, SInt32 *value);
  289. OSStatus USBPowerSetUsageData (USBReference reference, UInt32 inCollection,        
  290.                     HIDUsage inUsagePage, HIDUsage inUsage, SInt32 value);
  291.  
  292. These calls will be documented in an upcoming version of this readme. Use of these calls requires linking with the USBPowerClassLib stub library.
  293.  
  294. 26. Modifed reporting of overcurrent cases to eliminate false overcurrent indications for USB Hubs.
  295.  
  296. 27. Implement fix to USB Software Locator to provide region information to the server. A fix to the server is still required for the correct support of localized software via USB Software Locator. At present, only International English packages are offered to users regardless of the localized system software they are using.
  297.  
  298. 28. Removed the Apple specific mouse driver as the generic mouse class driver correctly handles support of this device.
  299.  
  300. 29. Added the USBPowerGetCapacityLimits and the USBPowerGetCapacityLimits calls to get/modify the control limits which are passed to the Power Manager which govern when the low power alert is raised for a USB Power Class device.
  301.  
  302. 30. The USL Services Library now exports the USBSetPipePolicy call.
  303.  
  304. 31. Improved interaction with USB Cardbus card when the card is ejected with USB devices attached, then reattached. Previously, if a USB device was connected to the USB Cardbus card and the card ejected, then re-inserted, the devices would stop functioning.
  305.  
  306. 32. Fixed problem with Keyboard class driver such that when awakening from sleep, the system would hang when multiple attempts were made to set the LED's.
  307.  
  308. 33. Fixed a longstanding name registry name corruption problem which occurred with the Lexmark Z51 printers only.
  309.  
  310. 34. Modified the USBAddDriverFromFSSpec call so that an error is returned if the previous driver could not be unloaded immediately. This can happen if the current module does not allow the finalize routine to be called immediately. In such case, the kUSBDeviceBusy error is returned. If this happens, then it is the responsiblity of the caller to give the system some task time so that the module can complete any necessary processing at task time an allow the finalize routine to be called. The psuedo code for making the USBAddDriverForFSSpec call is as follows.
  311.  
  312.   err = USBAddDriverForFSSpec();
  313.   while (err == kUSBDeviceBusy)
  314.   {
  315.     give system some idle time (WaitNextEvent())
  316.     err = USBAddDriverForFSSpec();
  317.     if we've looped "long enough", bail out
  318.   }
  319.  
  320. 35. Fixed a crash when using USB microphones with ViaVoice, by setting the default sample rate for input devices.
  321.  
  322. 36. Fixed a problem whereby a USB mouse quits working after an ADBReInit call on machines without the ADBShim present. The ADBShim is present on all Macintosh system that have USB built-in.
  323.  
  324. 37. Fixed USBResetDevice so that it no longer corrupts memory past the parameter block. For USB 1.3 and earlier, the call to USBResetDevice would overwrite memory up to 96 bytes past the end of the parameter block. For USB 1.3.x and earlier, one workaround is to append a pad of 96 bytes to a USBPB structure which you pass to USBResetDevice.
  325.  
  326. 38. Modified USBProber so that the bus probe window is not updated on every notification.
  327.  
  328. 39. Fixed a problem with the Modem Class Driver which closed the connection to the SerialShimLib if the system was put to sleep, even if the application using the USB Modem, had not closed the connection.
  329.  
  330. 40. Modified the USBKeyypad example code to support the ForceQuit key sequence on cpu's without the ADBShim present.
  331.  
  332. 41. Updated the USB API Reference to v26 which includes a description of the new calls and API's.
  333.  
  334. 42. USB audio support now provided for 16-bit mono USB Audio input devices.  Requires Mac OS 9.0.4.
  335.  
  336.  
  337.  
  338. Changes from USB 1.2 -> 1.3.5f8
  339. -------------------------------
  340.  
  341. 1. Added support for driver requested timeouts.
  342.  
  343. 2. Implemented support in the HID driver to support vendor-specific drivers for Immersion-based force feedback joysticks.
  344.  
  345. 3. Implemented support for the USB Expert to get the international strings from a USB device.
  346.  
  347. 4. Provide USB suspend and resume wakeup support.
  348.  
  349. 5. Fixed bug where device names were not showing up when the "not enough power" dialog was displayed. 
  350.  
  351. 6. USBExpertStatus calls are now re-entrant.  This should solve some "missing messages" reported by some driver writers.
  352.  
  353. 7. Modified USBProber to size the vertical scrollbars correctly. Fixed "flashing" problem when the expert log would overflow.
  354.  
  355. 8. Added new functions allowing USB Class Drivers to get and set the Expert Status level.  This will allow developers to debug specific problems they are experiencing and not overflow the log.  This functionality is currently only used by USB Prober.
  356.  
  357. 9. Added support for kNotifySystemSleepRevoke message. 
  358.  
  359. 10. Improved the performance of isochronous and interrupt transfer routines under Virtual Memory.
  360.  
  361. 11. CHANGE FOR 1.3a4 from previous builds - Added support for 5-second timeout functionality for Control Endpoint only.  If a device fails to transfer data for 5 seconds on the Control Endpoint (ie, NAKs continiously), then the transfer will be returned. We still permit the kUSBNo5SecTimeout flag for bulk transactions -- but we intend disallow this in a future build. -- PLEASE UPDATE YOUR DRIVERS IF YOU HAVE BEGUN TO USE THIS FLAG!
  362.  
  363. 12. Fixed a problem that could permit dereferencing nil if we ran out of isoch descriptors.
  364.  
  365. 13. Implemented the USBGetVersion call to obtain the version of USB present. This call is provided as an alternative for using Gestalt so that one did not need to link with InterfaceLib in order to obtain the version of USB present. The following is a sample call to demonstrate how to do this. For this example, you weak link the USBServicesLib as part of the project. The result of the call is a 4 byte 'vers' response exactly like what would be returned by using the Gestalt call with the 'usbv' selector.
  366.  
  367. #include <USB.h>  // ensure that you include the USB.h 1.3 header file
  368.  
  369. UInt32 MyUSBGetVersion(void)
  370. {
  371.     UInt32    version;
  372.     
  373.        if ((Ptr) USBGetVersion != (Ptr) kUnresolvedCFragSymbolAddress)
  374.               version = USBGetVersion();
  375.        else
  376.               version = 0;    // version of USB is less than 1.3
  377.        return version;
  378. }
  379.  
  380. 14. USBExpertStatus and USBExpertStatusLevel are now more efficient, if the message does not appear in the USB Prober log. USB Prober now checks the level parameter before processing the message.  Before, USB Prober checked the level just before inserting the message in the log.
  381.  
  382. 15. Fixed the Isochronous frStatus error codes.  In USB 1.2 (and earlier) the wrong error codes were returned. For example a DataOverRun error would appear as a Stall error, and DeviceNotResponding was reported as a BitStuff error.
  383.  
  384. 16. Fixed a problem with the OHCIUIM in which multiple overcurrent dialogs appeared when the root hub detected an overcurrent situation.
  385.  
  386. 17. Made sure that the kNotifySystemSleepDemand messages are sent the the driver modules.
  387.  
  388. 18. Fixed the Mouse driver to function better on USB CardBus-equipped PowerBooks.
  389.  
  390. 19. For USB.h 1.3b3, updated the USB.h header with the correct defines for selecting timeouts when no-data is being transferred.
  391.  
  392. 20. Added support for specifying timeouts when no-data is being transferred.
  393.  
  394. 21. Updated the USB_API_Ref from v23 to v24v4.
  395.  
  396. 22. API Addition - added the USBAddDriverForFSSpec function call. Refer to the v24v4 USB_API_Ref for a description of this call.
  397.  
  398. 23. Fix out-of-order transactions that could occur on immediate errors from the UIM. 
  399.  
  400. 24. Implemented a fix to the StorageClass sample driver to address a problem when trying to write greater than 2MB to the disk.
  401.  
  402. 25. Implemented a fix for a re-entrancy problem which occurred with some audio devices when doing a rapid hot-plug/unplug test.
  403.  
  404. 26. Improved error handling in the printer driver.
  405.  
  406. 27. Fixed problem wuch that drivers were reporting a status of USBPending.
  407.  
  408. 28. Added the following class drivers to the USB Device Extension file
  409.   USBHIDDriver - support for HID class devices, subclass 0
  410.   USBHIDDriver1 - support for HID class devices, subclass 1
  411.   USBCommClassDriver - supports USB Comm Class devices, subclass "Abstract Control Model", protocol V.25.
  412.   USBAudioClassDriver - requires SSW 9.0
  413.   USBAudioStreamDriver - requires SSW 9.0
  414.   USBPrintingSupport
  415.   plus a number vendor specific modules for force feedback game devices.
  416.  
  417. 29. Updated the USBManagerLib to include the USBAddShimFromDisk call.
  418.  
  419. 30. Included the USB Software Locator Extension as part of the DDK.  This extension is required for Mac OS 9.0 on PCI Power Macintosh Systems which do not have USB built-in. This extension works with the Software Locator to download USB drivers from the Internet for devices for which no matching driver is found. The USB Software Locator extension does nothing if installed over Mac OS 8.6. A Tech Note (#1191) has been released which discusses how developers can provide support for the USB Software Locator mechanism <http://developer.apple.com/technotes/tn/tn1191.html>.
  420.  
  421. Known Issues with USB 1.3.5
  422. ---------------------------
  423. 1. The iBook, iMac DV, and the Power Macintosh G4 systems with AGP support USB Mass Storage devices at startup. If media is present when the system is started, the driver loaded from ROM will not be replaced by a Mass Storage driver located in the Extensions folder, if present. On the other hand, if the media (like a Zip disk) is inserted after the system has booted, then the disk-based driver will be used.
  424.  
  425. If there is a need to force the vendor specific storage class driver to be used, one can make the USBAddDriverForFSSpec call. One important note on the use of this call, you must pass in the USBReference num for the USBDeviceReference, and the FSSpec must be for a correcsponding device class driver. For the storage class case, set the USBReference number to the composite class driver which has loaded the storage class interface. The FSSpec record must point to USB Device Support file which contains the composite class driver.